package cn.iocoder.yudao.module.iot.api.scene;

import cn.iocoder.yudao.framework.common.enums.RpcConstants;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.iot.core.biz.IotSceneCommonApi;
import cn.iocoder.yudao.module.iot.core.biz.dto.IotSceneAuthReqDTO;
import cn.iocoder.yudao.module.iot.core.biz.dto.IotSceneGetReqDTO;
import cn.iocoder.yudao.module.iot.core.biz.dto.IotSceneRespDTO;
import cn.iocoder.yudao.module.iot.service.scene.IotSceneService;
import jakarta.annotation.Resource;
import jakarta.annotation.security.PermitAll;
import org.springframework.context.annotation.Primary;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;

/**
 * IoT 场景 API 实现类
 */
@RestController
@Validated
@Primary
@TenantIgnore
public class IoTSceneApiImpl implements IotSceneCommonApi {

    @Resource
    private IotSceneService sceneService;

    @Override
    @PostMapping(RpcConstants.RPC_API_PREFIX + "/iot/scene/auth")
    @PermitAll
    @TenantIgnore
    public CommonResult<Boolean> authScene(@RequestBody IotSceneAuthReqDTO authReqDTO) {
        // TODO: 实现场景认证逻辑
        return success(true);
    }

    @Override
    @PostMapping(RpcConstants.RPC_API_PREFIX + "/iot/scene/get")
    @PermitAll
    @TenantIgnore
    public CommonResult<IotSceneRespDTO> getScene(@RequestBody IotSceneGetReqDTO infoReqDTO) {
        // 仅支持通过id或sceneName获取
        IotSceneRespDTO respDTO = null;
        if (infoReqDTO.getId() != null) {
            respDTO = BeanUtils.toBean(sceneService.getSceneDetail(infoReqDTO.getId()), IotSceneRespDTO.class);
        } else if (infoReqDTO.getSceneName() != null) {
            // 通过名称查找所有场景，取第一个匹配
            List<cn.iocoder.yudao.module.iot.controller.app.scene.vo.IotSceneRespVO> list = sceneService.getSceneList(null);
            for (var vo : list) {
                if (infoReqDTO.getSceneName().equals(vo.getName())) {
                    respDTO = BeanUtils.toBean(vo, IotSceneRespDTO.class);
                    // 手动设置场景名称，因为字段名不匹配
                    respDTO.setSceneName(vo.getName());
                    break;
                }
            }
        }
        return success(respDTO);
    }

    /**
     * 获取所有场景（自定义扩展，便于下游批量获取）
     */
    @Override
    @GetMapping(RpcConstants.RPC_API_PREFIX + "/iot/scene/all")
    @PermitAll
    @TenantIgnore
    public CommonResult<java.util.List<IotSceneRespDTO>> getAllScenes(@RequestParam(required = false) Long userId) {
        java.util.List<cn.iocoder.yudao.module.iot.controller.app.scene.vo.IotSceneRespVO> list = sceneService.getSceneList(userId);
        java.util.List<IotSceneRespDTO> dtoList = BeanUtils.toBean(list, IotSceneRespDTO.class);
        // 手动设置场景名称，因为字段名不匹配
        for (int i = 0; i < list.size() && i < dtoList.size(); i++) {
            dtoList.get(i).setSceneName(list.get(i).getName());
        }
        return success(dtoList);
    }

    @Override
    @GetMapping(RpcConstants.RPC_API_PREFIX + "/iot/scene/actionsByDeviceId")
    @PermitAll
    @TenantIgnore
    public CommonResult<java.util.List<IotSceneRespDTO>> getSceneActionsByDeviceId(@RequestParam Long deviceId) {
        java.util.List<cn.iocoder.yudao.module.iot.controller.app.scene.vo.IotSceneRespVO> list = sceneService.getScenesByDeviceId(deviceId);
        java.util.List<IotSceneRespDTO> dtoList = BeanUtils.toBean(list, IotSceneRespDTO.class);
        // 手动设置场景名称，因为字段名不匹配
        for (int i = 0; i < list.size() && i < dtoList.size(); i++) {
            dtoList.get(i).setSceneName(list.get(i).getName());
        }
        return success(dtoList);
    }

    @Override
    @GetMapping(RpcConstants.RPC_API_PREFIX + "/iot/scene/allEnabled")
    @PermitAll
    @TenantIgnore
    public CommonResult<java.util.List<IotSceneRespDTO>> getAllEnabledScenes() {
        // 获取所有启用的场景（状态为1的场景）
        java.util.List<cn.iocoder.yudao.module.iot.controller.app.scene.vo.IotSceneRespVO> list = sceneService.getEnabledScenes();
        java.util.List<IotSceneRespDTO> dtoList = BeanUtils.toBean(list, IotSceneRespDTO.class);
        // 手动设置场景名称，因为字段名不匹配
        for (int i = 0; i < list.size() && i < dtoList.size(); i++) {
            dtoList.get(i).setSceneName(list.get(i).getName());
        }
        return success(dtoList);
    }
}